package com.infore.operation.mapper;

import java.util.Date;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.infore.operation.entity.AttendanceInfo;
import com.infore.operation.entity.AttendanceRule;
import com.infore.operation.entity.Image;
import com.infore.operation.entity.Inspect;
import com.infore.operation.entity.ReportImge;
import com.infore.operation.entity.WorkType;
import com.infore.operation.entity.reportDetil;

public interface AttendanceMapper {
	// 新增打卡记录
	Integer saveAttendanceInfo(AttendanceInfo Info);

	// 查询规则
	AttendanceRule queryRule();

	// 新增日报
	Integer saveReport(Map<String, Object> map);

	// 新增日报图片
	Integer saveReportImage(@Param("images") List<ReportImge> imges);

	// 新增关联关系
	Integer saveReportLinkId(@Param("map") Map<String, Object> map);

	// 查询日报类型
	List<WorkType> queryWorkType();

	// 查询当天个人的巡检信息
	List<Map<String, Object>> queryinspectionRecords(@Param("userId") Integer userId, @Param("date") String date);

	// 查询日报详情列表
	List<reportDetil> queryReports(@Param("range") Integer range, @Param("postName") String postName,
			@Param("userId") Integer userId, @Param("date") String date);

	// 查询日报月度提交状态统计
	List<Map<String, Object>> queryReportTypeStatistics(@Param("userId") Integer userId,
			@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("range") Integer range,
			@Param("postName") String postName);

	// 下属一天共有多少人提交了日报 或者 自己提交了多少日报
	Map<String, Object> queryTotalReportUnderLow(@Param("userId") Integer userId, @Param("postName") String postName,
			@Param("range") Integer range, @Param("startTime") String startTime, @Param("endTime") String endTime);

	// 下属一共有多少人
	Map<String, Object> queryTotalPsonUnderlow(@Param("userId") Integer userId, @Param("postName") String postName);

	// 考勤多少天
	List<Map<String, Object>> queryTotalAttendance(@Param("startTime") String startTime,
			@Param("endTime") String endTime,@Param("userId") Integer userId);

	// 日报提交时间总汇
	List<Map<String, Object>> queryTotalReport(@Param("startTime") String startTime, @Param("endTime") String endTime,
			@Param("userId") Integer userId);

	// 查询下属日报统计列表
	List<Map<String, Object>> queryPowerReportInfo(@Param("startTime") String startTime,
			@Param("endTime") String endTime, @Param("userId") Integer userId, @Param("postName") String postName);

	// 删除日报
	Integer deleteReport(@Param("reportId") String reportId);

	// 查询日报下的巡检
	List<Map<String, Object>> queryinspectionRecordByreportId(@Param("reportId") String reportId);

	// 根据关联id查询图片
	List<String> queryImageByReportId(@Param("reportId") String reportId);

	// 查询考勤下日报的提交情况
	List<Map<String, Object>> queryReportSubmissionStateStatistics(@Param("endTime") String endTime,
			@Param("startTime") String startTime, @Param("userId") Integer userId);

	// 查询日报相关的日报审核信息
	List<Map<String, Object>> queryAuditByreport(@Param("date") String date, @Param("userId") Integer userId);

	// 查询日报下的补卡信息
	Map<String, Object> querySupplementPunch(@Param("userId") Integer userId);

	// 查询日打卡记录
	List<AttendanceInfo> queryDayAttendanceRecords(@Param("userId") Integer userId, @Param("date") String date);

	// 查询本日本人的日报记录
	List<Map<String, Object>> queryDayReportInfo(@Param("userId") Integer userId, @Param("date") String date);

	// 根据不同类型查询打卡记录
	List<String> queryMonthTabulateStatistics(@Param("userId") Integer userId, @Param("type") Integer type,
			@Param("startTime") String startTime, @Param("endTime") String endTime);

	// 查出旷工记录
	List<String> queryAbsenteeismDays(@Param("userId") Integer userId, @Param("type") Integer type,
			@Param("startTime") String startTime, @Param("endTime") String endTime);
	// 查询月度打卡状态统计
	List<Map<String,Object>>queryMonthStatusStatistics(@Param("userId") Integer userId,@Param("startTime") String startTime, @Param("endTime") String endTime);
	String querycountMonthTabulateStatistics(@Param("userId") Integer userId, @Param("type") Integer type,
			@Param("startTime") String startTime, @Param("endTime") String endTime);
	//补卡纪录
    Integer updateAttendanceInfo(AttendanceInfo Info);
}
